Operator Library: Hardware Platform
该算子代表运行速率为每光纤通道 25 Gbit/s 的 CXP over Fiber (CoF) 相机与 VisualApplets 之间的图像数据接口。该算子可用于四通道 CoF 配置,即 100 Gbit/s。接口拓扑结构由 FiberConnection 参数选择,允许算子连接到 QSFP28 端口 [0] 或 QSFP28 端口 [1]。无论相机提供什么格式,该算子都会输出原始图像数据。然后,您需要将此图像数据转换为相机发送的格式。要转换图像数据,请使用适当的算子来聚合原始字节值并将其转换(cast)为像素值。运行过程中的某些情况可以通过下文所述的事件系统进行通信。此外,该算子还具有多个用于指示与相机连接状态的参数。
| 适用于 Hardware Platform |
|---|
| imaFlex 2 Dual 100 |
在 VisualApplets 中实例化
该运算符在其输出端 O 上提供图像数据。此输出端始终存在。除此标准输出端口外,您还可以为 CXP 标头元数据配置一个可选的 MetaDataO 输出。在运算符实例化期间,将显示以下弹出对话框:

在此处,您可以指定可选的元数据端口。如果将端口可用性设置为“0”(默认值),则该运算符中将不存在此端口。如果将端口可用性设置为 1,则元数据端口将在运算符接口中可用。
可选的 MetaDataO 端口
MetaDataO 组织为一个 10x1 的内核链接,由 10 个 24 位组件组成。输出格式如下图所示。

每个 CXP 帧都提供相应的图像标头。压缩的图像标头包含 10 个不同的值。这些值介于 8 到 24 位之间。该算子将这 10 个值提供为填充的内核值 (10x1),每个组件均填充至 24 位。
| 图像标头字段 | 内核索引 | Bit Width [bit] | 描述 |
|---|---|---|---|
| StreamId | 0 | 8 | CXP 流的 ID |
| Tag | 1 | 16 | 源图像索引。该索引随每个传输的图像而递增,并在达到 0xFFFF 时回绕到 0。包含与同一图像相关的数据的每个流都应使用相同的编号(针对多抽头流的情况)。 |
| XSize | 2 | 24 | 该值表示以像素为单位的图像宽度。 |
| XOff | 3 | 24 | 该值表示图像相对于完整设备图像左侧像素的水平偏移量(以像素为单位)。 |
| YSize | 4 | 24 | 该值表示以像素为单位的图像高度。对于线扫描图像,此值设置为 0。 |
| YOff | 5 | 24 | 该值表示图像相对于完整设备图像顶行的垂直偏移量(以像素为单位)。对于线扫描图像,此值设置为 0。 |
| DSizeL | 6 | 24 | 该值表示每行图像的 32 位数据字数。 |
| PixelF | 7 | 16 | 该值表示 Pixel Format。 |
| TapG | 8 | 16 | 该值表示抽头几何结构(tap geometry)。 |
| Flags | 9 | 8 | 图像标志。 |
设备资源占用
根据参数 FiberConnection 的选择,该算子使用 Port[0] CoF Lane 的 4 个资源或 Port[1] CoF Lane 的 4 个资源。该资源代表 QSFP28 连接器中的物理光纤通道,位于端口 [0] 或端口 [1] 上。分配的通道随后将专用于 CoF protocol。使用不同算子(数据转发)的其他协议也可以使用 QSFP28 连接器。但是,协议选择是针对整个 QSFP28 端口的,即针对其中的所有 4 个通道。您可以在 AppletProperties 算子的 FiberProtocol0 和 FiberProtocol1 参数中定义协议。对于事件系统,将使用 EventPort 类型的可配置资源。此外,还会分配一个只读资源 EventID,供运行时软件用于事件通道识别和注册。

Port[n] 代表 QSFP28[n] 连接器。资源索引是所选连接器内的光纤通道。
![]() |
资源为只读 |
|---|---|
|
除 EventPort 外的所有资源均为只读。其值反映了映射到端口(连接器)和通道(连接器内的光纤连接)的 FiberConnection 参数值。 |
![]() |
修改图像宽度和图像高度 |
|---|---|
|
通过输出链接的最大图像宽度和高度属性,您可以将宽度和高度调整为相机特定的设置。但是,运算符端口 O 上的最大图像宽度 必须能被端口 O 的 Parallelism 整除。因此,请确保最大图像宽度能够被端口 O 的 Parallelism 整除! |
错误处理与事件系统
当算子检测到接收到的重建帧大于或小于相机在 CXP 图像标头中声明的尺寸时,将递增相应的错误 Counter 参数之一:
-
如果接收到的帧的尺寸小于图像标头中指定的大小,则会递增 FrameCorruptedCount。
-
如果接收到的帧的尺寸大于图像标头中指定的大小,则会递增 FrameOversizedCount。
For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). Events can be caused by corrupted frames or CRC errors. The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

-
字 [0]:
-
位 [0:15]:发生事件的 CXP 图像标签。
-
-
字 [1]:
-
Bits [0:7]:保留位,没有定义的功能。您可以忽略其值。
-
Bits [8:15]:发生事件的 Stream ID。
-
-
字 [2]:
-
Bit [0]:发生 CRC 错误。
-
Bits [1:15]:保留位,没有定义的功能。您可以忽略其值。
-
-
字 [3]:
-
Bit [0]:为保留位,没有定义的功能。您可以忽略其值。
-
Bit [1]:发生事件丢失。这意味着先前的事件已丢失。当运行时软件对事件没有响应且内部事件队列溢出时,就会发生这种情况。
-
Bit [2:15]:保留位,没有定义的功能。您可以忽略其值。
-
每个错误事件都会触发运行时软件中的中断。为了减少中断次数,可能会合并多个具有相同帧标记(frame tag)的事件。合并事件时,其错误标志也会合并。
如果某个事件丢失,紧随其后的事件将包含有关丢失事件的信息。此先前的事件无法与共享相同帧标记的任何其他事件进行合并。
由 CRC 错误引起的事件包含帧标记,但此标记可能并不总是对应于发生 CRC 错误的准确帧。在某些情况下,该标记可能指向前一帧或后一帧。
当相机发送的 CXP 数据包跨越两个或多个帧之间的过渡时,可能会发生这种情况。CRC 计算在数据包结束时完成,而流数据则是在动态(on-the-fly)重建的。因此,在操作员发送前一帧之后,可能会检测到 CRC 错误。
在正常条件下——即相机数据包不包含一帧的结束和下一帧的开始——在 CRC 错误期间报告的帧标记将始终是正确的。
在其他情况下,如果完整的帧流数据小于最大数据包大小,则单个数据包内可能会出现一帧的重叠。在这种情况下,软件应用程序也应将前一帧(帧标记 – 1)和后一帧(帧标记 + 1)视为可能已损坏。
| Link Parameter | Output Link O | 输出链路 MetaDataO |
|---|---|---|
| Bit Width | 8 | 24 |
| Arithmetic | unsigned | unsigned |
| Parallelism | 48 | 1 |
| Kernel Columns | 1 | 10 |
| Kernel Rows | 1 | 1 |
| Img Protocol | {VALT_IMAGE2D, VALT_LINE1D} (default: VALT_IMAGE2D) | {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} (default: VALT_IMAGE2D) |
| Color Format | VAF_GRAY | VAF_GRAY |
| Color Flavor | FL_NONE | FL_NONE |
| Max. Img Width | any(默认值:1056) | 1 |
| Max. Img Height | any(默认值:1056) | 1 |
| FiberConnection | |
|---|---|
| 键入 | 静态写入参数 |
| 默认 | port_0_lane_0_1_2_3 |
| 范围 | {port_0_lane_0_1_2_3, port_1_lane_0_1_2_3} |
|
参数 FiberConnection 用于定义相机连接到哪个 QSFP28 端口,以及相机操作员正在使用该端口的哪些通道(lane)。 目前,端口 0 和端口 1 仅支持具有 4 个通道的相机配置。只有当该端口的 AppletProperties 操作员中的 FiberProtocol 参数设置为 CoF 而不是 DataForwarding 时,才能使用所选的 QSFP28 端口。 如果 FiberProtocol 参数设置为 DataForwarding,且 CoFCamera 操作员尝试映射到该光纤端口,则设计规则检查(DRC)将生成错误消息。在这种情况下,FiberConnection 参数将被标记为冲突(红色),将鼠标悬停在上方将显示解释该冲突的快速提示帮助消息。 只有一个 CoFCamera 操作员可以在相同通道上使用相同的硬件 QSFP28 端口。多个操作员之间的映射必须在整个设计中保持唯一。 |
|
| MaxPacketSize | |
|---|---|
| 键入 | 静态写入参数 |
| 默认 | _16384 |
| 范围 | {_16384, _8192} |
|
参数 MaxPacketSize 根据 CXP 标准定义了所连接相机的最大流数据包大小(以字节为单位)。相机发送的流数据包大小将小于或等于此限制。 此参数会影响块 RAM(Block RAM)FPGA 资源的使用情况:值越小,使用的块 RAM 资源越少。示例(4 个通道):值 _16384 使用 64 个块 RAM 资源;值 _8192 使用 32 个块 RAM 资源。 |
|
| InjectError | |
|---|---|
| 键入 | 动态写入参数 |
| 默认 | PacketTagError |
| 范围 | {PacketTagError, ImageTagError, CorrectedError, PacketBufferOverflow, CrcError, FrameCorrupted, FrameOversized, UnexpectedStartupData} |
|
参数 InjectError 用于出于测试目的注入错误。注入的错误会使对应的 Counter 参数递增。 根据错误类型的不同,注入也可能导致软件中断事件。有关错误语义的详细信息,请参阅相关参数的描述。 |
|
| UsedConnections | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 4 |
| 范围 | [1 : 4] |
|
此参数目前未在使用。 它是为将来的功能预留的。 |
|
| PacketTagErrorCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
参数 PacketTagErrorCount 用于统计收到的数据包中标签不符合 CXP 标准预期标签的数量。当后续数据流数据包标签枚举中出现间隙时,该值会进行统计。它是一个 12 位的 Counter:
当溢出位置 1 时,该 Counter 值应被视为无关项(don't care),即发生了 2047 次以上的错误情况。 |
|
| ImageTagErrorCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于统计图像标头标签、根据 CXP 标准的预期标签以及接收到的标签之间发生了多少次不匹配。它是一个 12 位的 Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|
| CorrectedErrorCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数显示在图像标头或行标记中检测到并已成功纠正的错误数量。它是一个 12 位的 Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|
| PacketBufferOverflowCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于监视通道绑定数据包缓冲区中的溢出情况。由于 CXP 协议的原因,溢出仅在使用一个以上光纤通道的配置中发生。它是一个 12 位的 Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|
| PacketBufferOverflowSource | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0x0 : 0xF] |
|
此参数实现了一个位掩码(bit mask),用于查询数据包缓冲区溢出发生在四个 CXP 通道(即光纤通道)中的哪一个。顺序:
|
|
| CameraScanMode | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 面阵 |
| 范围 | {面阵, 线阵} |
|
收到的图像标头指示数据流是用于面阵扫描还是线阵扫描应用。此参数显示最近收到的数据流图像标头信息。 |
|
| UnexpectedStartupDataCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于检测操作员重置后第一个数据值意外出现(因为事先未收到图像标头)的错误状况。它报告处理开始时的意外字节数。它是一个 12 位的 Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 由于相机或采集卡固件的实现错误,或者对发现过程的软件控制不当,可能会导致出现意外的启动数据。相机、光纤模块或光纤电缆的硬件缺陷也可能导致这种情况。 |
|
| FrameCorruptedCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于计算采集过程中损坏的帧数。损坏的帧包含发送到 VisualApplets 流水线的错误像素。这是一个 12-bit Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|
| FrameOversizedCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于计算采集过程中检测到的尺寸过大的帧数。尺寸过大的帧是指包含的行数或像素数多于图像标头中指定的行数或像素数的帧。此类错误可能是由硬件缺陷引起的传输问题或相机的固件漏洞导致的。这是一个 12-bit Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|
| CrcErrorCount | |
|---|---|
| 键入 | 动态读取参数 |
| 默认 | 0 |
| 范围 | [0 : 4095] |
|
此参数用于计算 CXP 数据包中出现 CRC 错误的次数。这是一个 12-bit Counter:
如果溢出位置 1,则该 Counter 值无效且应被忽略,这意味着发生了 2047 次以上的错误情况。 |
|

![[注意]](../common/images/admon/note.png)
![[重要]](../common/images/admon/important.png)
上一页

